<?php
//大航海版本管理
$config = array(
	'app' => array('dir'=>'../test/','home' => 'home'),
	'src' => array('dir'=>'../test/','home' => 'homes'),
	'datadir' => './data'
);
$tar = array('ser'=>array('服务器管理'),'app'=>array('程序版本管理'),'src'=>array('资源版本管理'));
$dt = 'ser';
$data = array();
$msg = '';
if($_GET)
{
	if(!file_exists($config['datadir'].'/ver.php'))
	{
		saveCache(array('app'=>array(),'src'=>array(),'ser'=>array()));
	}
	$vdata = include($config['datadir'].'/ver.php');
	if(isset($tar[$_GET['s']])) $dt = $_GET['s'];
	if(isset($_GET['act']))
	{
		if($_GET['act'] == 'add')
		{
			$data[] = array('','','');
			if($_POST)
			{
				if($dt == 'ser')
				{
					if(!isset($vdata[$dt][$_POST['sv']]))
					{
						$vdata[$dt][$_POST['sv']] = array($_POST['sv'], $_POST['d'], $_POST['port'], $_POST['appa'], $_POST['srca']);
						saveCache($vdata);
					}
					else
						$msg = '此服务器已经存在';
				}
				else
				{
					if(!isset($vdata[$dt][$_POST['v']]))
					{
						$vdata[$dt][$_POST['v']] = array($_POST['v'], $_POST['d'], $_POST['m']);
						if(isset($config[$dt]))
						{
							if(!is_dir($config[$dt]['dir'].$_POST['m']))
								xCopy($config[$dt]['dir'].$config[$dt]['home'], $config[$dt]['dir'].$_POST['m']);
							saveCache($vdata);
							$msg = '添加成功';
						}
						else
							$msg = '非法提交';
					}
					else
						$msg = '此版本号已经存在';
				}
			}
		}
		else if($_GET['act'] == 'edt' && isset($_GET['k']) && isset($vdata[$dt][$_GET['k']]))
		{
			if($_POST)
			{
				if($dt == 'ser')
				{
					if(isset($vdata[$dt][$_POST['sv']]))
					{
						$vdata[$dt][$_POST['sv']] = array($_POST['sv'], $_POST['d'], $_POST['port'], $_POST['appa'], $_POST['srca']);
						saveCache($vdata);
					}
					else
						$msg = '服务器不能修改';
				}
				else
				{
					$vdata[$dt][$_GET['k']][0] = $_POST['v'];
					$vdata[$dt][$_GET['k']][1] = $_POST['d'];
					if(isset($config[$dt]))
					{
						if($vdata[$dt][$_GET['k']][2] != $_POST['m'] && !is_dir($config[$dt]['dir'].$_POST['m']))
						{
							deltree($config[$dt]['dir'].$vdata[$dt][$_GET['k']][2]);
							xCopy($config[$dt]['dir'].$config[$dt]['home'], $config[$dt]['dir'].$_POST['m']);
						}
					}
					else
						$msg = '非法提交';
					$vdata[$dt][$_GET['k']][2] = $_POST['m'];
					saveCache($vdata);
				}
			}
			$data[] = $vdata[$dt][$_GET['k']];
		}
		else if($_GET['act'] == 'del')
		{
			if(isset($_GET['k']) && isset($vdata[$dt][$_GET['k']]))
			{
				foreach($vdata['ser'] as $v)
				{
					if($dt == 'app' && $v[3] == $_GET['k'])
					{
						$msg = '此程序版本正在使用不能删除';
						break;
					}
					else if($dt == 'src' && $v[4] == $_GET['k'])
					{
						$msg = '此资源版本正在使用不能删除';
						break;
					}
				}
				if($msg == '')
				{
					deltree($config[$dt]['dir'].$vdata[$dt][$_GET['k']][2]);
					unset($vdata[$dt][$_GET['k']]);
					saveCache($vdata);
				}
			}
		}
	}
	else
	{
		$data = $vdata[$dt];
	}
}

function saveCache($d)
{
	global $config;
	$s = '<?php return '.var_export($d,true).';';
	$fh = fopen($config['datadir'].'/ver.php','w');
	if($fh)
	{
		fwrite($fh,$s);
		fclose($fh);
	}
}

function xCopy($s,$d)
{
    if (!file_exists($d))
    {
        if (!mkdir(rtrim($d, '/'), 0777))
        {
        //$err->add($_LANG['cannt_mk_dir']);
        return false;
        }
        @chmod($d, 0777);
     }
	if(!is_dir($s))
	{  
		return 0;
	}
	if(!is_dir($d))
	{
		mkdir($d,0777);   
	}
	$handle=dir($s);
	while($entry=$handle->read())
	{
		if(($entry!=".")&&($entry!=".."))
		{
			if(is_dir($s."/".$entry))
			{
				xCopy($s."/".$entry,$d."/".$entry);
			}
			else
			{
				copy($s."/".$entry,$d."/".$entry);
			}
		}    
	}    
	return 1;
}

function deltree($pathdir)
{
	//echo ＄pathdir;//调试时用的
	if(is_empty_dir($pathdir))//如果是空的
	{
		rmdir($pathdir);//直接删除
	}
	else
	{
		//否则读这个目录，除了.和..外
		$d = dir($pathdir);
		while($a = $d->read())
		{
			if(is_file($pathdir.'/'.$a) && ($a!='.') && ($a!='..')){unlink($pathdir.'/'.$a);}//如果是文件就直接删除
			if(is_dir($pathdir.'/'.$a) && ($a!='.') && ($a!='..'))
			{//如果是目录
				if(!is_empty_dir($pathdir.'/'.$a))//是否为空
				{//如果不是，调用自身，不过是原来的路径+他下级的目录名
					deltree($pathdir.'/'.$a);
				}
				else
				{//如果是空就直接删除
					rmdir($pathdir.'/'.$a);
				}
			}
		}
		$d->close();
		rmdir($pathdir);//删除
	}
}

function is_empty_dir($path)
{
	$dh = opendir($path);
	while(false !== ($f = readdir($dh)))
	{
		if($f != "." && $f != "..")
		{
			closedir($dh);
			return false;
		}
	}
	closedir($dh);
	return true;
}
?>
<!DOCTYPE html>
<html>
 <head>
  <title> <?php echo $tar[$dt][0];?> </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 </head>
 <body>
	<div><a href='?s=ser'>服务版本</a> <a href='?s=app'>程序版本管理</a> <a href='?s=src'>资源版本管理</a></div>
	<?php 
	echo '<h1>',$tar[$dt][0],'</h1>';
	echo '<div style="color:red;">',$msg,'</div>';
	echo '<table>';
	if(count($data) == 1 && isset($_GET['act']) && ($_GET['act'] == 'add' || $_GET['act'] == 'edt'))
	{
		echo '<form method="post">';
		if($dt == 'ser')
		{
			echo '<tr><td>服务器</td><td><input name="sv" value="',$data[0][0],'" /></td></tr>';
			echo '<tr><td>说明</td><td><input name="d" value="',$data[0][1],'" /></td></tr>';
			echo '<tr><td>端口</td><td><input name="port" value="',$data[0][2],'" /></td></tr>';
			echo '<tr><td>程序地址</td><td><select name="appa">';
			foreach($vdata['app'] as $k=>$v)
				echo '<option value="',$k,'">',$v[0],'</option>';
			echo '</select></td></tr>';
			echo '<tr><td>资源地址</td><td><select name="srca">';
			foreach($vdata['src'] as $k=>$v)
				echo '<option value="',$k,'">',$v[0],'</option>';
			echo '</select></td></tr>';
			echo '<tr><td colspan="2"><input type="submit" value="提交" /></td></tr>';
		}
		else
		{
			echo '<tr><td>版本号</td><td><input name="v" value="',$data[0][0],'" /></td></tr>';
			echo '<tr><td>说明</td><td><input name="d" value="',$data[0][1],'" /></td></tr>';
			echo '<tr><td>目录</td><td><input name="m" value="',$data[0][2],'" /> (如果目标目录已经存在将不复制文件)</td></tr>';
			echo '<tr><td colspan="2"><input type="submit" value="提交" /></td></tr>';
		}
		echo '</form>';
	}
	else
	{
		echo '<tr><th></th><th><a href="?s=',$dt,'&act=add">添加</a></th></tr>';
		echo '<tr><th>说明(版本号)</th><th>操作</th></tr>';
		foreach($data as $k=>$v)
		{
			echo '<tr><td>',$v[1],'(',$v[0],')</td><td><a href="?s=',$dt,'&k=',$k,'&act=edt">修改</a> <a href="?s=',$dt,'&k=',$k,'&act=del">删除</a></td></tr>';
		}
	}
	echo '</table>';
	?>
 </body>
</html>